package com.tiancheng.trade.payment.vo.api;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import jakarta.validation.Valid;
import java.io.Serializable;
import java.util.List;

/**
 * 创建paypal支付订单请求数据
 */
@Data
public class PaypalCreateReqVO implements Serializable {
    //税费
    private Integer tax;
    // 实收金额
    private Integer amount;
    // 应收金额
    private Integer orderAmount;
    //购物详情
    private String description;
    //支付订单创建成功跳转链接
    private String successUrl;

   // private String failUrl;
    //取消支付订单创建跳转链接
    private String cancelUrl;
    // 订单号
    @NotEmpty
    private String orderId;
    // 支付渠道 paypal
    @NotEmpty
    private String payChannel;
    // 支付方式 paypal
    @NotNull
    private String payWay;
    // 微信公众号/小程序支付时用户标识
    private String openid;
    // 移动端微信appid或微信公众号appid等的标识字段
    private String subAppId;
    // 支付场景  支付场景（app/miniapp/H5/wxapp/pcweb/face-swiping/scan）
    @NotEmpty
    private String payScene;
    // 移动端请求头信息
    private String appType;

    private String appVersion;
    // 时间戳，精确到秒
    private Long ts;
     // 用户ID
    @NotEmpty
    private String uid;
    // 用户手机号
    private String userTel;
     //支付订单号
    @NotNull
    private String paymentId;
    //业务类型
    @NotNull
    private String businessType;
    //订单名称
    @NotEmpty
    private String orderName;
    //主商户编码
    @NotEmpty
    private String merchantCode;
    //主商户名称
    @NotEmpty
    private String merchantName;
    // 币种
    private String currency;
    //子订单信息
    @Valid
    @NotEmpty
    private List<SubOrderPaypalDTO> subPaypalOrders;
    /**
     * 运营商支付渠道id
     */
    @NotNull(message = "企业支付渠道id不允许为空")
    private Long orgPaymentChannelId;
    
    @Data
    public static  class SubOrderPaypalDTO {

        /** 商户编码 */
        @NotEmpty
        private String merchantCode;
        /**
         * 商户名称
         */
        private String merchantName;
        /**
         * 业务侧产品编号
         */
        @NotEmpty
        private String productCode;
        /**
         * 交易中台对应的产品id
         */
        private String productId;
        /**
         * 产品名称
         */
        @NotEmpty
        private String productName;
        /**
         * 产品详情
         */
        @NotEmpty
        private String productDetail;
        /**
         * 产品类型名称
         */
        private String productTypeName;
        /**
         * 购买数量
         */
        private Integer productCount;
        /**
         * 子订单实收金额
         */
        @NotNull
        private Integer amount;

        /**
         * 子订单应收金额
         */
        @NotNull
        private Integer orderAmount;

        /**
         * 子订单编号
         */
        @NotEmpty
        private String subOrderId;
    }
}
